package com.im.service.utils;

import com.im.service.config.AppConfig;
import com.im.common.model.RestResponse;
import com.im.common.utils.HttpRequestUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * 回调服务，用于处理回调请求
 */
@Slf4j
@Component
public class CallbackService {

    /**
     * HTTP请求工具类
     */
    @Autowired
    HttpRequestUtils httpRequestUtils;

    /**
     * 应用配置类
     */
    @Autowired
    AppConfig appConfig;

    /**
     * 共享线程池
     */
    @Autowired
    ShareThreadPool shareThreadPool;

    /**
     * 回调方法，用于异步处理回调请求
     *
     * @param appId           应用ID
     * @param callbackCommand 回调命令
     * @param jsonBody        回调请求体
     */
    public void callback(Integer appId, String callbackCommand, String jsonBody) {
        // 提交任务到共享线程池中执行
        shareThreadPool.submit(() -> {
            try {
                // 发送POST请求
                httpRequestUtils.doPost(appConfig.getCallbackUrl(), Object.class, builderUrlParams(appId, callbackCommand), jsonBody, null);
            } catch (Exception e) {
                log.error("callback 回调{} : {}出现异常 ：{} ", callbackCommand, appId, e.getMessage());
            }
        });
    }

    /**
     * 回调之前的方法，用于同步处理回调请求
     *
     * @param appId           应用ID
     * @param callbackCommand 回调命令
     * @param jsonBody        回调请求体
     * @return RestResponse对象
     */
    public RestResponse beforeCallback(Integer appId, String callbackCommand, String jsonBody) {
        try {
            // 发送POST请求并返回RestResponse对象
            RestResponse response = httpRequestUtils.doPost("", RestResponse.class, builderUrlParams(appId, callbackCommand), jsonBody, null);
            return response;
        } catch (Exception e) {
            log.error("callback 之前回调{} : {}出现异常 ：{} ", callbackCommand, appId, e.getMessage());
            // 出现异常时返回成功的RestResponse对象
            return RestResponse.success();
        }
    }

    /**
     * 构建URL参数Map
     *
     * @param appId   应用ID
     * @param command 命令
     * @return Map对象
     */
    public Map builderUrlParams(Integer appId, String command) {
        Map map = new HashMap();
        map.put("appId", appId);
        map.put("command", command);
        return map;
    }

}
